package com.wenx.v3system.modular.platform.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wenx.v3system.modular.platform.domain.po.PlatformTenant;
import com.wenx.v3system.modular.platform.domain.query.PlatformTenantQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 平台租户Mapper接口
 */
@Mapper
public interface PlatformTenantMapper extends BaseMapper<PlatformTenant> {

    /**
     * 分页查询租户（带统计信息）
     *
     * @param page  分页参数
     * @param query 查询条件
     * @return 分页结果
     */
    IPage<PlatformTenant> selectTenantPageWithStats(@Param("page") Page<PlatformTenant> page, 
                                                    @Param("query") PlatformTenantQuery query);

    /**
     * 根据租户ID查询租户详情（带统计信息）
     *
     * @param tenantId 租户ID
     * @return 租户详情
     */
    PlatformTenant selectTenantWithStatsById(@Param("tenantId") Long tenantId);

    /**
     * 根据租户编码查询租户
     *
     * @param code 租户编码
     * @return 租户信息
     */
    PlatformTenant selectTenantByCode(@Param("code") String code);

    /**
     * 根据域名查询租户
     *
     * @param domain 域名
     * @return 租户信息
     */
    PlatformTenant selectTenantByDomain(@Param("domain") String domain);

    /**
     * 查询即将过期的租户列表
     *
     * @param days 天数
     * @return 租户列表
     */
    List<PlatformTenant> selectExpiringTenants(@Param("days") Integer days);

    /**
     * 查询活跃租户列表（有用户登录活动）
     *
     * @param days 天数
     * @return 租户列表
     */
    List<PlatformTenant> selectActiveTenants(@Param("days") Integer days);

    /**
     * 更新租户当前用户数
     *
     * @param tenantId    租户ID
     * @param currentUsers 当前用户数
     */
    void updateCurrentUsers(@Param("tenantId") Long tenantId, @Param("currentUsers") Integer currentUsers);

    /**
     * 查询租户统计信息
     *
     * @return 统计信息Map
     */
    List<java.util.Map<String, Object>> selectTenantStats();

    /**
     * 查询行业分布统计
     *
     * @return 行业统计信息
     */
    List<java.util.Map<String, Object>> selectIndustryStats();

    /**
     * 查询套餐分布统计
     *
     * @return 套餐统计信息
     */
    List<java.util.Map<String, Object>> selectPlanStats();
} 